package com.xsq.wifi.utils;


import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class ProtocolUtils {

    /**
     * 构建协议头部
     * @param cmd 命令字
     * @param value 参数值
     * @param dataLength 数据长度
     */
    public static byte[] buildHeader(byte cmd, short value, int dataLength) {
        return ByteBuffer.allocate(ProtocolConstants.HEADER_LENGTH)
                .order(ByteOrder.BIG_ENDIAN) // 大端序
                .put(ProtocolConstants.PROTOCOL_VERSION)
                .put(cmd)
                .putShort(value)
                .putInt(dataLength)
                .array();
    }

    // 新增WiFi扫描命令构建方法
    public static byte[] buildWifiScanPacket() {
        return ByteBuffer.allocate(ProtocolConstants.HEADER_LENGTH)
                .order(ByteOrder.BIG_ENDIAN)
                .put(ProtocolConstants.PROTOCOL_VERSION)
                .put(ProtocolConstants.CMD_WIFISCAN_GET)
                .putShort((short) 0) // Value字段未使用
                .putInt(0)           // Data Length=0（无报文）
                .array();
    }

    /**
     * 解析响应状态码
     * @param response 完整响应数据
     */
    public static short parseStatus(byte[] response) {
        return ByteBuffer.wrap(response, 2, 2) // 从第2字节开始读取2字节
                .order(ByteOrder.BIG_ENDIAN)
                .getShort();
    }

    // 字节数组转十六进制字符串（调试用）
    public static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X ", b));
        }
        return sb.toString().trim();
    }
}
